const httpRequest = require("@/common/httpRequest.js")
export default class WebSocket {
	constructor(url) {
		this.url = url;
		this._timeout = 8000;
		this._timeoutObj = null;
		this.instance = null;
		this.client_id = "";
		this.onOpen()
	}
	connect() { //连接websocket
		this.close()
		this._reset()
		this.instance = uni.connectSocket({
			url: this.url,
			complete: () => {},
			success: (res) => {
				console.log(res, "聊天连接成功");
			}
		});
	}
	_start() {
		let _this = this;
		console.log("开始执行定时器了", this._timeoutObj);
		clearInterval(this._timeoutObj)
		this._timeoutObj = null
		this._timeoutObj = setInterval(() => {
			uni.sendSocketMessage({
				// 心跳发送的信息应由前后端商量后决定
				data: JSON.stringify({
					"type": 0,
					"data": {}
				}),
				success(res) {
					// console.log(res)
					console.log("发送心跳成功");
				},
				fail(err) {
					console.log(err)
					// _this.close()
					getApp().websocketStart()
				}
			});
		}, this._timeout);
	}
	// 心跳重置
	_reset() {
		clearInterval(this._timeoutObj);
		this._timeoutObj = null
		console.log("清楚定时器了", this._timeoutObj);
		return false;
	}
	send(data) { //发送消息
		this.instance.send({
			data,
			success: () => {}
		});
	}
	close() {
		uni.closeSocket({
			complete: () => {},
			success: (res) => {
				console.log(res, "聊天断开链接");
			}
		});
	}

	onOpen(callback) {
		let _this = this
		uni.onSocketOpen((res) => {
			callback && callback(res);
			_this._reset()
			_this._start()
		});
	}

	onMessage(callback) {
		uni.onSocketMessage((resp) => {
			let res = JSON.parse(resp.data)
			uni.$emit("onsocketmsg", "")
			callback && callback(resp);
			switch (res.type) {
				case 'init':
					// 初始化
					uni.setStorageSync("client_id", res.client_id)
					this.client_id = res.client_id;
					console.log("初始化成功", res.client_id)
					// im.getMsgboxNum();//更新消息数量
					// im.unreadMessage();//得到离线消息
					this.bangding(res.client_id);
					break;
				case 'cx': //撤回消息
					uni.$emit("chexiaomsg", res.data.friends_message_id)
					break;
				case "toroom": //别人给我打电话
					let enterdata = {
						type: 2, //1拨打，2接听
						roomId: res.data.room_no,
						friend_name: res.data.user.nickname,
						firend_avatar_text: res.data.user.avatar_text,
						firend_id: res.data.user.id
					}
					if (res.data.th_type == 1) {
						uni.navigateTo({
							url: "/pages_message/yuyinth?msg=" + encodeURIComponent(JSON.stringify(
								enterdata))
						})
					} else {
						uni.navigateTo({
							url: "/pages_message/shipinth?msg=" + encodeURIComponent(JSON.stringify(
								enterdata))
						})
					}

					break
				case "closeroom": //别人给我打电话我我挂断了
					uni.$emit("fromguaduan", "")
					break
				case "closeroomdata":
					this.getthdetail(res.data.room_no, res.data.chattime)
					break
				case "sendgiftdata":
					let data = {
						// lwname: "棒棒糖",
						lwname: res.data.gift.name,
						senduser: res.data.user.nickname
					}
					console.error("有人给我送礼物了1")
					uni.$emit("shoulwfn", data)
					break
				case 'onKeydown':
					// if (res.data.friends_id == im.last_chat_id) {
					// 	$('.layim-chat-status').html('对方正在输入..');
					// 	window.clearTimeout(im.t1); //去掉定时器
					// 	im.t1 = window.setTimeout(function() {
					// 		$('.layim-chat-status').html('');
					// 	}, 2200); //2.2秒没有收到按键信号说明已经停止输入
					// }
					break;

				case 'onLine':
					// if (res.data.status == 'online') {
					// 	//设置指定好友在线，即头像取消置灰
					// 	im.layim.setFriendStatus(res.data.uid, 'online');
					// } else {
					// 	//设置指定好友在线，即头像取消置灰
					// 	im.layim.setFriendStatus(res.data.uid, 'offline');
					// }
					break;

				case 'getMsgboxNum':
					// if (res.data.total > 0) {
					// 	im.layim.showNew('More', true); //标注“更多”新动态
					// 	if ($('.msgboxNum').parent().find('span').text()) {
					// 		$('.msgboxNum').parent().find('span').text('（' + res.data.total + '）');
					// 	} else {
					// 		$('.msgboxNum').parent().append('<span style="color: #f00;font-size: 14px;">（' +
					// 			res.data.total + '）</span>');
					// 	}
					// } else {
					// 	im.layim.showNew('More', false);
					// 	$('.msgboxNum').parent().find('span').remove();
					// }
					break;
				case 'chatMessage':
					// im.layim.getMessage(res.data); //单条聊天数据渲染
					// this.scanAudio()
					break;

				case 'getFriends':
					// //得到好友列表
					// console.log('收到更新好友数据');
					// var friend = im.layim.cache().friend;
					// for (let j = 0; j < friend.length; j++) {
					// 	if (friend[j].list) {
					// 		for (let i = 0; i < friend[j].list.length; i++) {
					// 			im.layim.removeList({
					// 				type: 'friend',
					// 				id: friend[j].list[i].id //好友或者群组ID
					// 			});
					// 		}
					// 	}
					// }
					// //添加好友到面板
					// if (res.data.length > 0) {
					// 	for (let i = 0; i < res.data.length; i++) {
					// 		im.layim.addList(res.data[i]);
					// 	}
					// }
					break;

				case 'getGroups':
					// //得到群组列表
					// console.log('收到更新群组数据');
					// var group = im.layim.cache().group;
					// for (let i = 0; i < group.length; i++) {
					// 	for (let j = 0; j < group.length; j++) {
					// 		im.layim.removeList({
					// 			type: 'group',
					// 			id: group[j].id
					// 		});
					// 	}
					// }

					// //添加群到面板
					// if (res.data.length > 0) {
					// 	for (let i = 0; i < res.data.length; i++) {
					// 		im.layim.addList(res.data[i]);
					// 	}
					// }
					break;

				case 'noticeMessage':
					// im.layim.getMessage(res.data); //系统消息数量
					break;

				default:
					break;
			}

		});
	}
	// scanAudio() {
	// 	var music = null
	// 	music = uni.createInnerAudioContext(); //创建播放器对象
	// 	music.sessionCategory = "ambient"
	// 	music.src = require("@/static/image/chat/messagePrompt.mp3");
	// 	music.play()
	// 	music.onEnded(() => {
	// 		music = null
	// 	})
	// }
	getthdetail(thbo, time) { //获取通话记录，查看获得了/扣除了多少金币
		httpRequest.request('/api/user/getUserTh', 'GET', {
			thbo
		}).then(res => {
			console.log("获取通话记录，查看获得了/扣除了多少金币", time);
			console.log("获取通话记录，查看获得了/扣除了多少金币", res);
			//获取当前页面栈的实例
			let pages = getCurrentPages();
			let currentPage = pages[pages.length - 1];
			let url = currentPage.route;
			console.log("如果当前处于首页", url);
			if (url == 'pages_message/popup') {
				return false
			}
			let dataobj = {
				xf: res.data.user_id == uni.getStorageSync("user_id") ? true : false,
				time: time,
				xfjb: res.data.jb_num,
			}
			uni.navigateTo({
				url: '/pages_message/popup?msg=' + encodeURIComponent(JSON.stringify(dataobj))
			})
		})
	}

	bangding(data) {
		httpRequest.request('/webim/Friends/zxBindUid', 'GET', {
			client_id: data
		}, false, false, true).then(res => {
			console.log(res.data);
		})
	}
	onError(callback) {
		uni.onSocketError((res) => {
			console.log("websocket关闭2");
			callback && callback(res);
		});
	}
	onClose(callback) {
		uni.onSocketClose((res) => {
			console.log("websocket关闭3");
			callback && callback(res);
		});
	}
}